/**
 * 
 */
package com.peycash.persistencia.dao.impl;

import java.util.Date;
import java.util.List;

import org.hibernate.Criteria;
import org.hibernate.criterion.MatchMode;
import org.hibernate.criterion.Restrictions;
import org.springframework.stereotype.Repository;
import org.springframework.util.CollectionUtils;

import com.peycash.dominio.Estados;
import com.peycash.dominio.Municipios;
import com.peycash.persistencia.PersistenciaException;
import com.peycash.persistencia.dao.MunicipioDAO;

/**
 * @author JAMARO
 *
 */
@Repository
public class MunicipioDAOImpl extends BaseDAOImpl<Municipios, Integer> implements
		MunicipioDAO {

	@Override
	public int findIdMunicipioByNombreAndEstado(String nombre, short idEstado) throws PersistenciaException{
		try{
			Criteria criteria = getSessionFactory().getCurrentSession().createCriteria(Municipios.class);
			criteria.add(Restrictions.like("nombre", nombre));
			criteria.add(Restrictions.eq("estados.idEstado", idEstado));
			List<Municipios> list = criteria.list();
			if(CollectionUtils.isEmpty(list)){
				Municipios m = new Municipios();
				Estados e = new Estados();
				e.setIdEstado(idEstado);
				m.setEstados(e);
				m.setFechaModificacion(new Date());
				m.setNombre(nombre);
				m.setUsuarioBd("PE");
				int pk = save(m);
				return pk;
			}else{
				Municipios m = list.get(0);
				return m.getIdMunicipio();
			}
		}catch(Exception e){
			throw new PersistenciaException("Error en findByNombreAndEstado:"+e.getMessage(), e);
		}
	}
	
	@Override
	public List<Municipios> findByNombre(String nombre) throws PersistenciaException{
		try{
			Criteria criteria = getSessionFactory().getCurrentSession().createCriteria(Municipios.class);
			criteria.add(Restrictions.ilike("nombre", nombre, MatchMode.START));
			List<Municipios> lista = criteria.list();
			return lista;
		}catch(Exception e){
			throw new PersistenciaException("Error en findByNombre:"+e.getMessage(), e);
		}
	}
	
}
